package com.springboot.wisdom.serviceApi.mqtt.constant;

import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.annotation.EnumValue;
import com.fasterxml.jackson.annotation.JsonEnumDefaultValue;
import com.fasterxml.jackson.annotation.JsonValue;
import com.springboot.wisdom.common.common.constant.BaseValueEnum;
import io.swagger.annotations.ApiModel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.ToString;

@ApiModel(description = "Mqtt设备报警等级")
@ToString
@Getter
@AllArgsConstructor
public enum MqttDeviceGradeEnum implements BaseValueEnum {

    /**
     * 【
     * 0：未赋值。
     * 1：低，2：中，3：高
     * 】
     */
    // 未序列化成功的默认值。
    @JsonEnumDefaultValue
    NONE("0", "NONE"),
    LOW("1", "LOW"),
    MEDIUM("2", "MEDIUM"),
    HIGH("3", "HIGH"),
    ;

    @EnumValue // 标记数据库存的值是code
    private final String value;

    @JsonValue  // 序列化时使用此方法返回值
    private final String desc;


    /**
     * 根据code查找
     *
     * @param value 枚举值。
     * @return 枚举对象。未找到返回NONE
     */
    public static MqttDeviceGradeEnum findEnumByValue(String value) {
        for (MqttDeviceGradeEnum toEnum : MqttDeviceGradeEnum.values()) {
            if (toEnum.getValue().equalsIgnoreCase(value)) {
                //如果需要直接返回name则更改返回类型为String,return toEnum.name;
                return toEnum;
            }
        }
        return null;
    }

    /**
     * 根据name查找
     *
     * @param desc 枚举index。
     * @return 枚举对象
     */
    public static MqttDeviceGradeEnum findEnumByDesc(String desc) {
        for (MqttDeviceGradeEnum toEnum : MqttDeviceGradeEnum.values()) {
            if (toEnum.getValue().equalsIgnoreCase(desc)) {
                //如果需要直接返回code则更改返回类型为String,return toEnum.code;
                return toEnum;
            }
        }
        return null;
    }

    /**
     * 根据value获取Desc。
     *
     * @param value
     * @return
     */
    public static String findEnumByValueToDesc(String value) {
        MqttDeviceGradeEnum enumByValue = findEnumByValue(value);
        return ObjectUtil.isNotEmpty(enumByValue) ? enumByValue.getDesc() : null;
    }

    /**
     * 避免非正常值。
     *
     * @return
     */
    public static String findEnumByDescToDesc(String desc) {
        MqttDeviceGradeEnum enumByDesc = findEnumByDesc(desc);
        return ObjectUtil.isNotEmpty(enumByDesc) ? enumByDesc.getDesc() : null;
    }
}
